--- title: "02-JSON" created: 2025-12-02 tags: - 项目 aliases: - JSON --- # JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。它使用文本格式表示数据结构,通过键值对来存储信息,广泛用于 Web 开发、移动应用、API 交互、数据传输等领域。 --- ### 一、JSON 基础结构 1. **对象(Object)**:用 `{ }` 包围,以键值对的形式存储数据。键必须是字符串类型,值可以是字符串、数字、布尔值、对象、数组或 null。 ```json { "name": "Alice", "age": 25, "isStudent": false, "contact": { "email": "alice@example.com", "phone": "123-456-7890" } } ``` 2. **数组(Array)**:用 `[ ]` 包围,包含多个值,可以是任意类型。常用于存储有序的数据集合。 ```json [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30} ] ``` 3. **值类型**: - **字符串(String)**:必须使用双引号 `"` 包裹。比如 `"name": "Alice"` - **数字(Number)**:可以是整数或浮点数,比如 `"age": 25`。 - **布尔值(Boolean)**:`true` 或 `false`,比如 `"isStudent": false` - **空值(null)**:用于表示空或未知值,比如 `"nickname": null` --- ### 二、JSON 的应用场景 1. **数据传输**:JSON 是前后端数据交换的常见格式,特别是在 RESTful API 和 WebSocket 传输中。例如,从服务器获取用户信息可以以 JSON 格式返回数据,前端解析后展示给用户。 2. **配置文件**:JSON 文件被广泛用作应用的配置文件,如 `package.json`(Node.js)、`composer.json`(PHP)、`config.json` 等,方便应用启动时读取配置信息。 3. **跨平台数据共享**:JSON 格式不依赖于具体编程语言,因此在不同编程语言之间传输数据时也经常用到。例如,JavaScript、Python、Java 等都支持 JSON 解析。 4. **存储数据**:对于一些简单的数据存储场景,JSON 文件可以用作数据库的替代品(如 NoSQL 数据库 MongoDB 的数据格式就是类似 JSON 的 BSON 格式)。 --- ### 三、JSON 在前后端交互中的使用 #### 1. 使用 JSON 发送请求 在前端,我们可以通过 AJAX 或 Fetch API 发送 JSON 数据到后端。例如,在 JavaScript 中: ```javascript // 使用 Fetch API 发送 JSON 数据到服务器 fetch("https://example.com/api", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username: "Alice", age: 25 }) }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error("Error:", error)); ``` #### 2. 使用 JSON 解析响应 在前端接收后端的 JSON 响应数据时,可以直接解析并使用: ```javascript // 解析 JSON 响应 fetch("https://example.com/api/user/123") .then(response => response.json()) // 将响应解析为 JSON 对象 .then(data => { console.log("User Name:", data.name); console.log("User Age:", data.age); }); ``` --- ### 四、JSON 解析与生成 1. **JavaScript**:使用 `JSON.parse()` 和 `JSON.stringify()`。 ```javascript const jsonString = '{"name": "Alice", "age": 25}'; const user = JSON.parse(jsonString); // 解析为 JavaScript 对象 const newUser = { name: "Bob", age: 30 }; const newJsonString = JSON.stringify(newUser); // 转为 JSON 字符串 ``` 2. **Python**:使用 `json` 模块中的 `json.loads()` 和 `json.dumps()`。 ```python import json # 解析 JSON 字符串 json_str = '{"name": "Alice", "age": 25}' user = json.loads(json_str) # 生成 JSON 字符串 new_user = {"name": "Bob", "age": 30} new_json_str = json.dumps(new_user) ``` 3. **Java**:使用 `org.json` 或 `Gson` 库。 ```java import org.json.JSONObject; // 解析 JSON 字符串 String jsonString = "{\"name\":\"Alice\", \"age\":25}"; JSONObject jsonObject = new JSONObject(jsonString); String name = jsonObject.getString("name"); // 生成 JSON 字符串 JSONObject newJson = new JSONObject(); newJson.put("name", "Bob"); newJson.put("age", 30); ``` ### 五、JSON 的高级用法 1. **嵌套 JSON**:JSON 对象和数组可以嵌套,构建更复杂的数据结构。例如,以下 JSON 包含一个用户列表: ```json { "users": [ {"id": 1, "name": "Alice", "friends": [{"id": 2, "name": "Bob"}]}, {"id": 3, "name": "Charlie", "friends": []} ] } ``` 2. **动态属性名**:有些场景下,属性名可能是动态的,比如以某种 ID 作为键: ```json { "123": {"name": "Alice", "age": 25}, "456": {"name": "Bob", "age": 30} } ``` 3. **条件结构**:JSON 本身没有条件判断功能,但在使用 JSON 配置时,可以通过结构设计实现条件效果,例如通过 `type` 字段来决定数据的不同用途。 4. **序列化与反序列化**:在编程语言中,JSON 可以将复杂的对象转换为字符串(序列化),并在需要时将字符串还原为对象(反序列化)。这在存储或传输对象数据时非常有用。 --- ### 六、JSON 与其他数据格式的对比 | 格式 | 特点 | 应用场景 | | --- | --- | --- | | JSON | 易读、跨平台、结构化 | Web、API 传输数据 | | XML | 层次结构清晰、支持复杂描述 | 配置文件、SOAP 协议 | | YAML | 易读(无引号与花括号),注释支持良好 | 配置文件 | | BSON | JSON 的二进制格式,支持更多数据类型 | MongoDB、存储场景 | | Protocol Buffers | 高效的二进制数据传输,适合大型数据 | Google 内部、数据流 | JSON 因其简单和高效,成为 API 数据传输的主流格式,但 XML 和 Protocol Buffers 在特定场景下也具有优势。 --- ### 七、JSON 的常见问题与解决方法 1. **格式错误**:JSON 的语法要求严格,比如必须使用双引号、不能有末尾逗号。可通过 JSON 验证工具检查格式。 2. **大小写敏感**:JSON 属性名是大小写敏感的,比如 `Name` 和 `name` 是不同的属性。 3. **性能问题**:对于大数据量的 JSON,解析和序列化会影响性能,可以使用流式解析或二进制格式(如 BSON)优化性能。 4. **数据类型限制**:JSON 不支持函数、日期、`NaN` 等类型。日期通常使用字符串格式(ISO 8601)表示,比如 `"2024-11-06T16:24:58Z"`。 5. **跨域问题**:前端使用 AJAX 请求 JSON 数据时,如果涉及跨域问题,可以在后端通过 `CORS` 解决。 --- JSON 是现代数据传输和存储的基础格式,具有灵活性和可读性,尤其在 Web 应用、移动应用以及分布式系统中使用广泛。掌握 JSON 的基本结构和高级用法,将有助于提高数据交互的效率和稳定性。 --- **项目分区导航**: [[01-http协议-websocket协议|http协议-websocket协议]] ⬅️ | 02-JSON | ➡️ [[03-WebSocket实战篇|WebSocket实战篇]]